package Hoja5;



/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.util.Scanner;
import java.util.InputMismatchException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.List;
import java.util.ArrayList;

/**
 *
 * @author Josue
 */
public class DriverHoja5 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        List<Cliente> ArrayClientes = new ArrayList<Cliente>();
        AbsClass<Cliente> Caja1= new CircularArray<Cliente>();
        AbsClass<Cliente> Caja2= new CircularArray<Cliente>(); 
        AbsClass<Cliente> Caja3= new CircularArray<Cliente>(); 
        AbsClass<Cliente> Caja4= new CircularArray<Cliente>(); 
        
        int ingreso;
        do{
        menu();
        
        
        ingreso = (int)obtenerNumero("¿Que opcioon desea realizar?",true);
        switch(ingreso){
            case 1:
                   Caja1 = new Array<Cliente>(); 
                   Caja2 = new Array<Cliente>(); 
                   Caja3 = new Array<Cliente>(); 
                   Caja4 = new Array<Cliente>(); 
                break;
            case 2:
                   Caja1 = new CircularArray<Cliente>(); 
                   Caja2 = new CircularArray<Cliente>(); 
                   Caja3 = new CircularArray<Cliente>(); 
                   Caja4 = new CircularArray<Cliente>(); 
                break;
            case 3:
                   int cant = (int)obtenerNumero("¿Cuantos clientes desa ingresar?",true);
                   for (int i=0;i<cant;i++){
                Cliente cli = new Cliente();
                try {
                    ArrayClientes.add(cli);
                } catch (Exception ex) {
                    Logger.getLogger(DriverHoja5.class.getName()).log(Level.SEVERE, null, ex);
                }
                cli.setEntrada((int)obtenerNumero("Ingrese el tiempo de entrada para Cliente "+cant+1,true));
                cli.setTransac();
                }
                for(int y=0;y<ArrayClientes.size();y++){
                    Cliente cli0 = ArrayClientes.get(y);
                    Cliente cli1 = null;
                    Cliente cli2 = null;
                    Cliente cli3 = null;
                    Cliente cli4 = null;
                    if(!Caja1.isEmpty()) cli1 = Caja1.peek();
                    if(!Caja2.isEmpty()) cli2 = Caja2.peek();
                    if(!Caja3.isEmpty()) cli3 = Caja1.peek();
                    if(!Caja4.isEmpty()) cli4 = Caja2.peek();
                    if(cli0.getEntrada()>cli1.getTot()) Caja1.poll(); cli1.setEstado(1);
                    if(cli0.getEntrada()>cli2.getTot()) Caja2.poll(); cli2.setEstado(1);
                    if(cli0.getEntrada()>cli3.getTot()) Caja3.poll(); cli3.setEstado(1);
                    if(cli0.getEntrada()>cli4.getTot()) Caja4.poll(); cli4.setEstado(1);
                    
                }
                   
                break;
            default:
                System.out.println("Opcion Invalida!");
        }
                
            
        }while(ingreso != 4);
        
        
    }
    
    public static void menu(){
        System.out.println();
        System.out.println("-------------- Menu Principal --------------");
        System.out.println();
        System.out.println(" 1. Usar Lista de Arreglos.                 ");
        System.out.println(" 2. Usar Lista Circular.                    ");
        System.out.println(" 3. Ingresar Clientes.                      ");
        System.out.println(" 4. Salir.                                  ");
        System.out.println();
    }
    
        public static double obtenerNumero(String mensaje, boolean mostrar){
        Scanner ingreso = new Scanner(System.in);
        double num = -1;
        
        System.out.print(mensaje);
        try{
            num = ingreso.nextDouble();
        }
        catch(InputMismatchException exception){
            if (mostrar)
                System.out.println("\nERROR: ~~> Dato invalido. :O(\n");
        }
        finally{
            ingreso.nextLine();//Atrapar el ENTER
        }
        return num;
    }
      public static Array<Cliente> getMinValue(Array<Cliente>[] numbers){  
        int minValue = numbers[0].size(); 
        Array<Cliente> menor = numbers[0];
        for(int i=1;i<numbers.length;i++){  
            if(numbers[i].size() < minValue){  
                minValue = numbers[i].size();
                menor = numbers[i];
            }  
        }  
        return menor;  
    }  
}
